home *** CD-ROM | disk | FTP | other *** search
/ HyperLib 1997 Winter - Disc 1 / HYPERLIB-1997-Winter-CD1.ISO.7z / HYPERLIB-1997-Winter-CD1.ISO / オンラインウェア / PRG / ICProgKit 1.3.sit / ICProgKit1.3 / Internet Config Source / ICComponent.p < prev    next >
Text File  |  1996-07-14  |  20KB  |  630 lines

  1. unit ICComponent;
  2.  
  3. (* ・・・Start Header・・・ *)
  4.  
  5. (* File:         ICComponent.p
  6.  * Generated by: 1.0d4
  7.  * For:          IC 1.3
  8.  * On:           Sunday, 14 July 1996, 20:19:55
  9.  * 
  10.  * This file is part of the Internet Configuration system and
  11.  * is placed in the public domain for the benefit of all.
  12.  *)
  13.  
  14. (* ・・・End Header・・・ *)
  15.  
  16. interface
  17.  
  18.     uses
  19.         Components;
  20.  
  21.     function Main (var params: ComponentParameters; storage: Handle): ComponentResult;
  22.  
  23. implementation
  24.  
  25.     uses
  26. {$ifc undefined THINK_Pascal}
  27.         Types, Files, Memory, Errors, ToolUtils, AppleTalk, Aliases, 
  28.  
  29.         ICTypes, ICKeys, 
  30. {$endc}
  31.         ICLinkInSubs, ICLinkIn, ICCAPI, ICComponentSelectors;
  32.  
  33.     const
  34.         ICdefault_file_name_ID = 1024;                        (* ID of resource in component file *)
  35.         ICdefault_prompt_ID = 1025;                            (* ID of resource in component file *)
  36.  
  37.     type
  38.         globalsRecord = record
  39.                 self: ComponentInstance;
  40.                 current_target: ComponentInstance;
  41.                 inst: ICRRecord;
  42.             end;
  43.         globalsPtr = ^globalsRecord;
  44.         globalsHandle = ^globalsPtr;
  45.  
  46.     function GetStringFromResourceFile (globals: globalsHandle; id: integer; var name: Str255): ICError;
  47.         var
  48.             err: ICError;
  49.             junk: ICError;
  50.             refnum: integer;
  51.             strh: StringHandle;
  52.     begin
  53.         err := noErr;
  54.         name := '';
  55.         refnum := OpenComponentResFile(Component(globals^^.self));
  56.         if refnum <= 0 then begin
  57.             err := resNotFound;
  58.         end; (* if *)
  59.         if err = noErr then begin
  60.             strh := GetString(id);
  61.             if strh = nil then begin
  62.                 err := resNotFound;
  63.             end
  64.             else begin
  65.                 name := strh^^;
  66.             end; (* if *)
  67.             junk := CloseComponentResFile(refnum);
  68.         end; (* if *)
  69.         GetStringFromResourceFile := err;
  70.     end; (* GetStringFromResourceFile *)
  71.  
  72. (* Component Manager routines *)
  73.  
  74.     function ICCICanDo (globals: globalsHandle; selector: integer): ComponentResult;
  75.     (* Handle the Component Manager CanDo request.*)
  76.     begin
  77.         case selector of
  78.             kComponentVersionSelect..kComponentOpenSelect, kComponentTargetSelect, {}
  79.             kICC_first_select..kICC_last_select: 
  80.                 ICCICanDo := 1;
  81.             otherwise
  82.                 ICCICanDo := 0;
  83.         end; (* case *)
  84.     end; (* ICCICanDo *)
  85.  
  86.     function ICCIOpen (globals: globalsHandle; self: ComponentInstance): ComponentResult;
  87.     (* Handle the Component Manager Open request, mostly delayed until ICCStart. *)
  88.         var
  89.             err: ComponentResult;
  90.     begin
  91.         (* create our globals *)
  92.         globals := globalsHandle(NewHandle(sizeof(globalsRecord)));
  93.         err := MemError;
  94.  
  95.         if err = noErr then begin
  96.             globals^^.self := self;
  97.             globals^^.current_target := self;
  98.             (* tell the Component Manager about them *)
  99.             SetComponentInstanceStorage(self, Handle(globals));
  100.         end; (* if *)
  101.  
  102.         ICCIOpen := noErr;
  103.     end; (* ICCIOpen *)
  104.  
  105.     function ICCIClose (globals: globalsHandle; self: ComponentInstance): ComponentResult;
  106.     (* Handle the Component Manager Close request. *)
  107.         var
  108.             err: ComponentResult;
  109.     begin
  110.         err := noErr;
  111.         if globals <> nil then begin
  112. (* err := ICRStop(globals^^.inst); *)
  113.             DisposeHandle(Handle(globals));
  114.         end; (* if *)
  115.         ICCIClose := err;
  116.     end; (* ICCIClose *)
  117.  
  118.     function ICCITarget (globals: globalsHandle; new_target: ComponentInstance): ComponentResult;
  119.     (* Handle the Component Manager Target. *)
  120.         var
  121.             err: ComponentResult;
  122.     begin
  123.         globals^^.current_target := new_target;
  124.         ICCITarget := noErr;
  125.     end; (* ICCITarget *)
  126.  
  127. (* Internet Configuration specific routines *)
  128.  
  129.     function ICCIStart (globals: globalsHandle; creator: OSType): ICError;
  130.     (* Handle the start request, basically a replacement for the open because we need bonus data (creator). *)
  131.         var
  132.             err: OSErr;
  133.     begin
  134.         err := ICRStart(globals^^.inst, creator);
  135.         if err = noErr then begin
  136.             err := ICCDefaultFileName(globals^^.current_target, globals^^.inst.default_filename);
  137.         end; (* if *)
  138.         if err = noErr then begin
  139.             err := GetStringFromResourceFile(globals, ICdefault_prompt_ID, globals^^.inst.prompt);
  140.         end;
  141.         ICCIStart := err;
  142.     end; (* ICCIStart *)
  143.  
  144.     function ICCIForceInside (globals: globalsHandle; perm: ICPerm; var force_info: boolean): ICError;
  145.         var
  146.             err: ICError;
  147.             current_perm: icPerm;
  148.     begin
  149.         force_info := false;
  150.         current_perm := globals^^.inst.perm;
  151.         if (current_perm = perm) or ((current_perm = icReadWritePerm) and (perm = icReadOnlyPerm)) then begin
  152.             err := noErr;
  153.         end
  154.         else if current_perm = icNoPerm then begin
  155.             err := ICCBegin(globals^^.current_target, perm);
  156.             force_info := (err = noErr);
  157.         end
  158.         else begin
  159.             err := icPermErr;
  160.         end; (* if *)
  161.         ICCIForceInside := err;
  162.     end; (* ICCIForceInside *)
  163.  
  164.     function ICCIReleaseInside (globals: globalsHandle; force_info: boolean): ICError;
  165.     begin
  166.         if force_info then begin
  167.             ICCIReleaseInside := ICCEnd(globals^^.current_target);
  168.         end
  169.         else begin
  170.             ICCIReleaseInside := noErr;
  171.         end; (* if *)
  172.     end; (* ICCIReleaseInside *)
  173.  
  174.     (* The set and get routines are significantly complicated by the fact that the ICR versions can call *)
  175.     (* ICBegin if the calling program hasn't done so already. The problem with this is that override *)
  176.     (* component would not see these calls because the ICR code calls the code directly. The solution *)
  177.     (* is for the component to calls these routines itself (which sends them through the override *)
  178.     (* components. Oh god, this is confusing and it's getting worse as I try to maintain compatibility*)
  179.     (* and putting the cache in is going to be even worse. *)
  180.  
  181.     function ICCIGetPref (globals: globalsHandle; key: Str255; var attr: ICAttr; buf: Ptr; var size: longint): ICError;
  182.         var
  183.             err: ICError;
  184.             err2: ICError;
  185.             force_info: boolean;
  186.     begin
  187.         err := ICCIForceInside(globals, icReadOnlyPerm, force_info);
  188.         if err = noErr then begin
  189.             err := ICRGetPref(globals^^.inst, key, attr, buf, size);
  190.         end; (* if *)
  191.         err2 := ICCIReleaseInside(globals, force_info);
  192.         if err = noErr then begin
  193.             err := err2;
  194.         end; (* if *)
  195.         ICCIGetPref := err;
  196.     end; (* ICCIGetPref *)
  197.  
  198.     function ICCISetPref (globals: globalsHandle; key: Str255; attr: ICAttr; buf: Ptr; size: longint): ICError;
  199.         var
  200.             err: ICError;
  201.             err2: ICError;
  202.             force_info: boolean;
  203.     begin
  204.         err := ICCIForceInside(globals, icReadWritePerm, force_info);
  205.         if err = noErr then begin
  206.             err := ICRSetPref(globals^^.inst, key, attr, buf, size);
  207.         end; (* if *)
  208.         err2 := ICCIReleaseInside(globals, force_info);
  209.         if err = noErr then begin
  210.             err := err2;
  211.         end; (* if *)
  212.         ICCISetPref := err;
  213.     end; (* ICCISetPref *)
  214.  
  215.     function ICCIFindPrefHandle (globals: globalsHandle; key: Str255; var attr: ICAttr; prefh: Handle): ICError;
  216.         var
  217.             err: ICError;
  218.             prefsize: longint;
  219.             force_info: boolean;
  220.             err2: ICError;
  221.     begin
  222.         err := noErr;
  223.         if prefh = nil then begin
  224.             err := paramErr;
  225.         end;
  226.         prefsize := 0;
  227.         if err = noErr then begin
  228.             err := ICCIForceInside(globals, icReadOnlyPerm, force_info);
  229.             if err = noErr then begin
  230.                 err := ICCGetPref(globals^^.current_target, key, attr, nil, prefsize);
  231.             end;
  232.             if err = noErr then begin
  233.                 SetHandleSize(prefh, prefsize);
  234.                 err := MemError;
  235.             end; (* if *)
  236.             if err = noErr then begin
  237.                 HLock(prefh);
  238.                 err := ICCGetPref(globals^^.current_target, key, attr, prefh^, prefsize);
  239.                 HUnlock(prefh);
  240.             end; (* if *)
  241.             err2 := ICCIReleaseInside(globals, force_info);
  242.         end; (* if *)
  243.         if err = noErr then begin
  244.             err := err2;
  245.         end; (* if *)
  246.         if (prefh <> nil) and (err <> noErr) then begin
  247.             SetHandleSize(prefh, 0);
  248.         end; (* if *)
  249.         ICCIFindPrefHandle := err;
  250.     end; (* ICCIFindPrefHandle *)
  251.  
  252.     function ICCIGetPrefHandle (globals: globalsHandle; key: Str255; var attr: ICAttr; var prefh: Handle): ICError;
  253.         var
  254.             err: ICError;
  255.     begin
  256.         prefh := NewHandle(0);
  257.         err := MemError;
  258.         if err = noErr then begin
  259.             err := ICCIFindPrefHandle(globals, key, attr, prefh);
  260.         end;
  261.         if err = icPrefNotFoundErr then begin
  262.             SetHandleSize(prefh, 0);
  263.             attr := 0;
  264.             err := noErr;
  265.         end;
  266.         ICCIGetPrefHandle := err;
  267.     end;
  268.  
  269.     function ICCISetPrefHandle (globals: globalsHandle; key: Str255; attr: ICAttr; prefh: Handle): ICError;
  270.         var
  271.             s: SignedByte;
  272.             err: ICError;
  273.     begin
  274.         err := noErr;
  275.         if prefh <> nil then begin
  276.             if prefh^ = nil then begin
  277.                 err := paramErr;
  278.             end; (* if *)
  279.             if err = noErr then begin
  280.                 s := HGetState(prefh);
  281.                 HLock(prefh);
  282.                 err := ICCSetPref(globals^^.current_target, key, attr, prefh^, GetHandleSize(prefh));
  283.                 HSetState(prefh, s);
  284.             end; (* if *)
  285.         end
  286.         else begin
  287.             err := ICCSetPref(globals^^.current_target, key, attr, nil, 0);
  288.         end; (* if *)
  289.         ICCISetPrefHandle := err;
  290.     end; (* ICCISetPrefHandle *)
  291.  
  292.     function ICCIDefaultFileName (globals: globalsHandle; var name: Str63): ICError;
  293.         var
  294.             err: ICError;
  295.             junk: ICError;
  296.             refnum: integer;
  297.             strh: StringHandle;
  298.             s: Str255;
  299.     begin
  300.         err := GetStringFromResourceFile(globals, ICdefault_file_name_ID, s);
  301.         if err <> noErr then begin
  302.             name := ICdefault_file_name;
  303.         end
  304.         else begin
  305.             name := s;
  306.         end;
  307.         ICCIDefaultFileName := err;
  308.     end; (* ICCIDefaultFileName *)
  309.  
  310.     function ICCILaunchURL (globals: globalsHandle; hint: Str255; data: Ptr; len: longint; var selStart, selEnd: longint): ICError;
  311.         var
  312.             err: ICError;
  313.             urlh: Handle;
  314.             helper: ICAppSpec;
  315.             scheme: Str255;
  316.             junk_attr: longint;
  317.             size: longint;
  318.     begin
  319.         urlh := NewHandle(0);
  320.         err := MemError;
  321.         if err = noErr then begin
  322.             err := ICCParseURL(globals^^.current_target, hint, data, len, selStart, selEnd, urlh);
  323.         end; (* if *)
  324.         if err = noErr then begin
  325.             err := ICUFindScheme(urlh, scheme);
  326.         end; (* if *)
  327.         if err = noErr then begin
  328.             size := sizeof(helper);
  329.             err := ICCGetPref(globals^^.current_target, concat(kICHelper, scheme), junk_attr, @helper, size);
  330.         end; (* if *)
  331.         if err = noErr then begin
  332.             err := ICULaunchURL(helper.fCreator, urlh);
  333.         end; (* if *)
  334.         if urlh <> nil then begin
  335.             DisposeHandle(urlh);
  336.         end; (* if *)
  337.         ICCILaunchURL := err;
  338.     end; (* ICCILaunchURL *)
  339.  
  340.     function ICCIMapFilename (globals: globalsHandle; filename: Str255; var entry: ICMapEntry): ICError;
  341.         var
  342.             err: ICError;
  343.             entries: Handle;
  344.             junk_attr: ICAttr;
  345.     begin
  346.         err := noErr;
  347.         if filename = '' then begin
  348.             err := paramErr;
  349.         end; (* if *)
  350.         if err = noErr then begin
  351.             err := ICCGetPrefHandle(globals^^.current_target, kICMapping, junk_attr, entries);
  352.         end; (* if *)
  353.         if err = noErr then begin
  354.             err := ICCMapEntriesFilename(globals^^.current_target, entries, filename, entry);
  355.             DisposeHandle(entries);
  356.         end; (* if *)
  357.         ICCIMapFilename := err;
  358.     end; (* ICCIMapFilename *)
  359.  
  360.     function ICCIMapTypeCreator (globals: globalsHandle; fType, fCreator: OSType; filename: Str255; var entry: ICMapEntry): ICError;
  361.         var
  362.             err: ICError;
  363.             entries: Handle;
  364.             junk_attr: ICAttr;
  365.     begin
  366.         err := ICCGetPrefHandle(globals^^.current_target, kICMapping, junk_attr, entries);
  367.         if err = noErr then begin
  368.             err := ICCMapEntriesTypeCreator(globals^^.current_target, entries, fType, fCreator, filename, entry);
  369.             DisposeHandle(entries);
  370.         end; (* if *)
  371.         ICCIMapTypeCreator := err;
  372.     end; (* ICCIMapTypeCreator *)
  373.  
  374. (* ・・・Start ICCI.p・・・ *)
  375.  
  376.   function ICCIStop(globals : globalsHandle) : ICError;
  377.   begin
  378.     ICCIStop := ICRStop(globals^^.inst);
  379.   end; (* ICCIStop *)
  380.   
  381.   function ICCIFindConfigFile(globals : globalsHandle; count : integer; folders : ICDirSpecArrayPtr) : ICError;
  382.   begin
  383.     ICCIFindConfigFile := ICRFindConfigFile(globals^^.inst, count, folders);
  384.   end; (* ICCIFindConfigFile *)
  385.   
  386.   function ICCIFindUserConfigFile(globals : globalsHandle; var where : ICDirSpec) : ICError;
  387.   begin
  388.     ICCIFindUserConfigFile := ICRFindUserConfigFile(globals^^.inst, where);
  389.   end; (* ICCIFindUserConfigFile *)
  390.   
  391.   function ICCIGeneralFindConfigFile(globals : globalsHandle; search_prefs : Boolean; can_create : Boolean; count : integer; folders : ICDirSpecArrayPtr) : ICError;
  392.   begin
  393.     ICCIGeneralFindConfigFile := ICRGeneralFindConfigFile(globals^^.inst, search_prefs, can_create, count, folders);
  394.   end; (* ICCIGeneralFindConfigFile *)
  395.   
  396.   function ICCIChooseConfig(globals : globalsHandle) : ICError;
  397.   begin
  398.     ICCIChooseConfig := ICRChooseConfig(globals^^.inst);
  399.   end; (* ICCIChooseConfig *)
  400.   
  401.   function ICCIChooseNewConfig(globals : globalsHandle) : ICError;
  402.   begin
  403.     ICCIChooseNewConfig := ICRChooseNewConfig(globals^^.inst);
  404.   end; (* ICCIChooseNewConfig *)
  405.   
  406.   function ICCIGetConfigName(globals : globalsHandle; longname : Boolean; var name : Str255) : ICError;
  407.   begin
  408.     ICCIGetConfigName := ICRGetConfigName(globals^^.inst, longname, name);
  409.   end; (* ICCIGetConfigName *)
  410.   
  411.   function ICCIGetConfigReference(globals : globalsHandle; ref : ICConfigRefHandle) : ICError;
  412.   begin
  413.     ICCIGetConfigReference := ICRGetConfigReference(globals^^.inst, ref);
  414.   end; (* ICCIGetConfigReference *)
  415.   
  416.   function ICCISetConfigReference(globals : globalsHandle; ref : ICConfigRefHandle; flags : longint) : ICError;
  417.   begin
  418.     ICCISetConfigReference := ICRSetConfigReference(globals^^.inst, ref, flags);
  419.   end; (* ICCISetConfigReference *)
  420.   
  421.   function ICCISpecifyConfigFile(globals : globalsHandle; var config : FSSpec) : ICError;
  422.   begin
  423.     ICCISpecifyConfigFile := ICRSpecifyConfigFile(globals^^.inst, config);
  424.   end; (* ICCISpecifyConfigFile *)
  425.   
  426.   function ICCIGetSeed(globals : globalsHandle; var seed : longint) : ICError;
  427.   begin
  428.     ICCIGetSeed := ICRGetSeed(globals^^.inst, seed);
  429.   end; (* ICCIGetSeed *)
  430.   
  431.   function ICCIGetPerm(globals : globalsHandle; var perm : ICPerm) : ICError;
  432.   begin
  433.     ICCIGetPerm := ICRGetPerm(globals^^.inst, perm);
  434.   end; (* ICCIGetPerm *)
  435.   
  436.   function ICCIBegin(globals : globalsHandle; perm : ICPerm) : ICError;
  437.   begin
  438.     ICCIBegin := ICRBegin(globals^^.inst, perm);
  439.   end; (* ICCIBegin *)
  440.   
  441.   function ICCICountPref(globals : globalsHandle; var count : longint) : ICError;
  442.   begin
  443.     ICCICountPref := ICRCountPref(globals^^.inst, count);
  444.   end; (* ICCICountPref *)
  445.   
  446.   function ICCIGetIndPref(globals : globalsHandle; n : longint; var key : Str255) : ICError;
  447.   begin
  448.     ICCIGetIndPref := ICRGetIndPref(globals^^.inst, n, key);
  449.   end; (* ICCIGetIndPref *)
  450.   
  451.   function ICCIDeletePref(globals : globalsHandle; key : Str255) : ICError;
  452.   begin
  453.     ICCIDeletePref := ICRDeletePref(globals^^.inst, key);
  454.   end; (* ICCIDeletePref *)
  455.   
  456.   function ICCIEnd(globals : globalsHandle) : ICError;
  457.   begin
  458.     ICCIEnd := ICREnd(globals^^.inst);
  459.   end; (* ICCIEnd *)
  460.   
  461.   function ICCIEditPreferences(globals : globalsHandle; key : Str255) : ICError;
  462.   begin
  463.     ICCIEditPreferences := ICREditPreferences(globals^^.inst, key);
  464.   end; (* ICCIEditPreferences *)
  465.   
  466.   function ICCIParseURL(globals : globalsHandle; hint : Str255; data : Ptr; len : longint; var selStart : longint; var selEnd : longint; url : Handle) : ICError;
  467.   begin
  468.     ICCIParseURL := ICRParseURL(globals^^.inst, hint, data, len, selStart, selEnd, url);
  469.   end; (* ICCIParseURL *)
  470.   
  471.   function ICCIMapEntriesFilename(globals : globalsHandle; entries : Handle; filename : Str255; var entry : ICMapEntry) : ICError;
  472.   begin
  473.     ICCIMapEntriesFilename := ICRMapEntriesFilename(globals^^.inst, entries, filename, entry);
  474.   end; (* ICCIMapEntriesFilename *)
  475.   
  476.   function ICCIMapEntriesTypeCreator(globals : globalsHandle; entries : Handle; fType : OSType; fCreator : OSType; filename : Str255; var entry : ICMapEntry) : ICError;
  477.   begin
  478.     ICCIMapEntriesTypeCreator := ICRMapEntriesTypeCreator(globals^^.inst, entries, fType, fCreator, filename, entry);
  479.   end; (* ICCIMapEntriesTypeCreator *)
  480.   
  481.   function ICCICountMapEntries(globals : globalsHandle; entries : Handle; var count : longint) : ICError;
  482.   begin
  483.     ICCICountMapEntries := ICRCountMapEntries(globals^^.inst, entries, count);
  484.   end; (* ICCICountMapEntries *)
  485.   
  486.   function ICCIGetIndMapEntry(globals : globalsHandle; entries : Handle; ndx : longint; var pos : longint; var entry : ICMapEntry) : ICError;
  487.   begin
  488.     ICCIGetIndMapEntry := ICRGetIndMapEntry(globals^^.inst, entries, ndx, pos, entry);
  489.   end; (* ICCIGetIndMapEntry *)
  490.   
  491.   function ICCIGetMapEntry(globals : globalsHandle; entries : Handle; pos : longint; var entry : ICMapEntry) : ICError;
  492.   begin
  493.     ICCIGetMapEntry := ICRGetMapEntry(globals^^.inst, entries, pos, entry);
  494.   end; (* ICCIGetMapEntry *)
  495.   
  496.   function ICCISetMapEntry(globals : globalsHandle; entries : Handle; pos : longint; var entry : ICMapEntry) : ICError;
  497.   begin
  498.     ICCISetMapEntry := ICRSetMapEntry(globals^^.inst, entries, pos, entry);
  499.   end; (* ICCISetMapEntry *)
  500.   
  501.   function ICCIDeleteMapEntry(globals : globalsHandle; entries : Handle; pos : longint) : ICError;
  502.   begin
  503.     ICCIDeleteMapEntry := ICRDeleteMapEntry(globals^^.inst, entries, pos);
  504.   end; (* ICCIDeleteMapEntry *)
  505.   
  506.   function ICCIAddMapEntry(globals : globalsHandle; entries : Handle; var entry : ICMapEntry) : ICError;
  507.   begin
  508.     ICCIAddMapEntry := ICRAddMapEntry(globals^^.inst, entries, entry);
  509.   end; (* ICCIAddMapEntry *)
  510.   
  511.  
  512. (* ・・・End ICCI.p・・・ *)
  513.  
  514. (* ----- Component Entry Point ----- *)
  515.  
  516.     function Main (var params: ComponentParameters; storage: Handle): ComponentResult;
  517.     (* Component entry point.  It's pretty neat IMHO. *)
  518.         var
  519.             proc: ProcPtr;
  520.             s: signedByte;
  521.     begin
  522.         proc := nil;
  523.         case params.what of
  524.             (* Component Manager stuff *)
  525.             kComponentVersionSelect: 
  526.                 Main := internetConfigurationComponentInterfaceVersion + 1;
  527.             kComponentCanDoSelect: 
  528.                 proc := @ICCICanDo;
  529.             kComponentOpenSelect: 
  530.                 proc := @ICCIOpen;
  531.             (* Component Manager stuff *)
  532.             kComponentCloseSelect: 
  533.                 proc := @ICCIClose;
  534.             kComponentTargetSelect: 
  535.                 proc := @ICCITarget;
  536.             (* this component type stuff *)
  537. (* ・・・Start ICCSel.p2・・・ *)
  538.  
  539.         kICCStart: 
  540.           proc := @ICCIStart;
  541.         kICCStop: 
  542.           proc := @ICCIStop;
  543.         kICCFindConfigFile: 
  544.           proc := @ICCIFindConfigFile;
  545.         kICCFindUserConfigFile: 
  546.           proc := @ICCIFindUserConfigFile;
  547.         kICCGeneralFindConfigFile: 
  548.           proc := @ICCIGeneralFindConfigFile;
  549.         kICCChooseConfig: 
  550.           proc := @ICCIChooseConfig;
  551.         kICCChooseNewConfig: 
  552.           proc := @ICCIChooseNewConfig;
  553.         kICCGetConfigName: 
  554.           proc := @ICCIGetConfigName;
  555.         kICCGetConfigReference: 
  556.           proc := @ICCIGetConfigReference;
  557.         kICCSetConfigReference: 
  558.           proc := @ICCISetConfigReference;
  559.         kICCSpecifyConfigFile: 
  560.           proc := @ICCISpecifyConfigFile;
  561.         kICCGetSeed: 
  562.           proc := @ICCIGetSeed;
  563.         kICCGetPerm: 
  564.           proc := @ICCIGetPerm;
  565.         kICCDefaultFileName: 
  566.           proc := @ICCIDefaultFileName;
  567.         kICCBegin: 
  568.           proc := @ICCIBegin;
  569.         kICCGetPref: 
  570.           proc := @ICCIGetPref;
  571.         kICCSetPref: 
  572.           proc := @ICCISetPref;
  573.         kICCFindPrefHandle: 
  574.           proc := @ICCIFindPrefHandle;
  575.         kICCGetPrefHandle: 
  576.           proc := @ICCIGetPrefHandle;
  577.         kICCSetPrefHandle: 
  578.           proc := @ICCISetPrefHandle;
  579.         kICCCountPref: 
  580.           proc := @ICCICountPref;
  581.         kICCGetIndPref: 
  582.           proc := @ICCIGetIndPref;
  583.         kICCDeletePref: 
  584.           proc := @ICCIDeletePref;
  585.         kICCEnd: 
  586.           proc := @ICCIEnd;
  587.         kICCEditPreferences: 
  588.           proc := @ICCIEditPreferences;
  589.         kICCParseURL: 
  590.           proc := @ICCIParseURL;
  591.         kICCLaunchURL: 
  592.           proc := @ICCILaunchURL;
  593.         kICCMapFilename: 
  594.           proc := @ICCIMapFilename;
  595.         kICCMapTypeCreator: 
  596.           proc := @ICCIMapTypeCreator;
  597.         kICCMapEntriesFilename: 
  598.           proc := @ICCIMapEntriesFilename;
  599.         kICCMapEntriesTypeCreator: 
  600.           proc := @ICCIMapEntriesTypeCreator;
  601.         kICCCountMapEntries: 
  602.           proc := @ICCICountMapEntries;
  603.         kICCGetIndMapEntry: 
  604.           proc := @ICCIGetIndMapEntry;
  605.         kICCGetMapEntry: 
  606.           proc := @ICCIGetMapEntry;
  607.         kICCSetMapEntry: 
  608.           proc := @ICCISetMapEntry;
  609.         kICCDeleteMapEntry: 
  610.           proc := @ICCIDeleteMapEntry;
  611.         kICCAddMapEntry: 
  612.           proc := @ICCIAddMapEntry;
  613.  
  614. (* ・・・End ICCSel.p2・・・ *)
  615.             otherwise
  616.                 Main := badComponentSelector;
  617.         end; (* case *)
  618.         if proc <> nil then begin
  619.             if storage <> nil then begin
  620.                 s := HGetState(storage);
  621.                 HLock(storage);
  622.             end; (* if *)
  623.             Main := CallComponentFunctionWithStorage(storage, params, proc);
  624.             if (storage <> nil) and (params.what <> kComponentCloseSelect) then begin
  625.                 HSetState(storage, s);
  626.             end; (* if *)
  627.         end; (* if *)
  628.     end; (* Main *)
  629.  
  630. end. (* ICComponent *)